Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Лабораторна робота №3
з диcципліни: «Програмовані системи реального часу»
на тему: «Функції обліку часу виконання програми в системах реального часу. »
Мета роботи: Проаналізувати механізми обліку часу в системах реального часу, навчитися вимірювати часові інтервали, реалізації функцій затримки і механізми очікування надходженні подій. Виміряти час виконання системних функцій системи UCOS-II використовуючи RDTSC інструкцію Pentium процесора.
Теоретичні відомості
При розробці програмного забезпечення систем реального часу часто постають задачі вимірювання часових інтервалів виконання визначених фрагментів коду із достатньо високою точністю. Із цими задачами пов’язані питання формування визначених затримок, зокрема при роботі із апаратними засобами. Для вирішення таких питань можуть бути використані декілька механізмів.
Використання системного таймера операційної системи. Практично будь-яка операційна система реального часу використовує переривання від системного таймера для реалізації механізму квантування часу процесора, реалізації системних затримок, таймаутів. В системі UCOS-II всі функції із використанням таймаутів, системна функція затримки OSTimeDly використовують лічильники, які змінюються кожного переривання таймера. При виклику функцій затримки, які використовують цей механізм, ресурси процесора, які використовують цей механізм перерозподіляються між іншими задачами, тобто, процесор може виконувати корисну роботу. Час затримки обмежується тільки розрядністю змінних, використаних під внутрішні лічильники переривань таймера і може бути великим. Використання цього механізму характеризується наступними недоліками:
фактичний час затримки визначається біжучими станами процесів в системі і може змінюватись як в більшу так і меншу сторони, тобто спостерігається дрожання (jitter) затримки.
затримки, які можуть бути отримані в такий спосіб не можуть бути дуже малими. Типові значення – одиниці, десятки мілісекунд. Це зумовлено тим, що частота переривання системного таймера не може бути встановлена занадто високою. Чому? (пояснити самостійно!)
Використання годинника реального часу. В багатьох системах передбачена наявність апаратного годинника реального часу, який інкрементується певну кількість разів на секунду, наприклад, раз в секунду. Оскільки дискретність такого годинника є достатньо великою, то він не може бути використаний для вимірювання/формування малих затримок.
Використання апаратно-залежних механізмів. Розглянемо їх на прикладі архітектури IBM сумісного комп’ютера. Перший спосіб полягає у використанні другого каналу системного таймера для обліку часових інтервалів. Всі ЕОМ даного класу містять 16-розрядний таймер-лічильник, сумісний із Intel8254, вхід якого подається сигнал із частотою 1.19318 MHz. Оскільки лічильник є 16 розрядний, то максимальний інтервал часу може бути виміряний рівний 65536*0.838097 = 55мс. Цей механізм підтримується системою UCOS-II. В бібліотеці функцій, прототипи яких наведено в pc.h, вказано три функції:
PC_ElapsedInit() ініціалізація системи обліку часу.
PC_ElapsedStart() – встановлення часової мітки. Використовується для позначення першої ділянки коду, час виконання якого слід виміряти.
PC_ElapsedStop() – обчислення часу виконання фрагменту програми із моменту виклику функції PC_ElapsedStart, в мікросекундах.
Інший, більш досконалий механізм, полягає у використанні інструкції RDTSC (Real Time Stamp Counter) процесорів Pentium і вище. В процесорі вмонтований 64-лічильник, який інкрементується кожен машиннимй такт. В результаті виконання цієї інструкції значення лічильника заносяться в пару 32 розрядних регістрів. edx, eax. Оскільки лічильник 64 розрядний, то необхідно виконувати операції над 64 розрядними числами, і вносити поправку на можливе переповнення лічильника. Для обчислення конкретних часових інтервалів перш за все необхідно визначити частоту процесора, використовуючи точні ча...